Penjelasan Praktikum
Week 6
Mata Kuliah: Pemrograman Berorientasi Object
COURSE DESCRIPTION
This course is an introduction to the fundamental concepts of Object-Oriented Programming (OOP) paradigm. Students will gain understanding of basic programming principles and progressively explore into the core concepts of OOP, including classes, objects, constructors, encapsulation, polymorphism, and inheritance. The course emphasizes practical application, encouraging students to design, implement, test, and debug solutions for small systems within a collaborative technical team setting.
COURSE GOAL
Setelah mengikuti praktikum ini, mahasiswa mampu:
- Develop strong foundation in basic programming principles, fostering their ability to write code, utilize variables, and implement fundamental algorithms..
- Build knowledge of the essential OOP concepts, including classes, objects, constructors, encapsulation, polymorphism, and inheritance, laying the groundwork for understanding modular and scalable coding practices.
- Develop ability to apply theoretical knowledge in practical scenarios, emphasizing collaborative teamwork.
- Develop ability to design, implement, test, and debug solutions for small systems, fostering hands-on learning and problem-solving skills.
COURSE LEARNING OUTCOMES (CLOs)
| Week1 | Course Learning Outcomes | Subject | Code |
|---|---|---|---|
| 1 | Explain basic programming concepts | Basic programming | CLO-1 |
| 2 | Explain basic programming concepts | IDE software installation and Introduction to python programming | CLO-1 - CLO2 |
| 2 | 1. Explain basic programming concepts 2. Explain the elements that make up an object (class, instance, method, class variable) | - OOP paradigm concepts (Class, Object, Constructor) -Elements that make up an object (Class, instance, method, class variable) | CLO-2- CLO 3 |
Task
- Lengkapilah potongan code python berikut ini untuk membuat UI Sistem Monitoring
import tkinter as tk
from tkinter import messagebox
import serial
class MonitorApp:
def __init__(self, root):
...
def _setup_ui(self):
...
def _create_widgets(self, parent, label_text, min_val, max_val):
...
def _validate_input(self, entry, min_val, max_val):
...
# Jalankan program
if __name__ == "__main__":
root = tk.Tk()
app = MonitorApp(root)
root.mainloop()
- Lengkapilah potongan kode arduino berikut ini, agar bisa berkomunikasi dan menerima input dari UI yang telah di buat sebelumnya
#include <Servo.h> // Library untuk servo
// Pin untuk Motor DC
#define ... // Pin PWM untuk mengontrol kecepatan motor
#define ... // Pin untuk mengontrol arah motor
#define ... // Pin untuk mengontrol arah motor
String buff, buff_motor;
const char delimiter[] = ":"; // Pemisah
int motor;
void setup() {
Serial.begin(115200);
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
stopMotor(0); // Pastikan motor berhenti saat awal
}
void loop() {
if (Serial.available() > 0) {
buff = Serial.readString(); // Baca data dari serial
if (buff[0] == 'M'){
...
}
}
}
void forward(int num) {
...
}
void reverse(int num) {
...
}
void stopMotor(int num) {
...
}
-
Kompile dan upload kode arduino ke board arduino lalu close arduino IDE
-
Jalankan file Python UI dan coba inputkan data pada RPM dan Drajat Servo, Untuk membuktikan bahwa sistem sudah berjalan dengan benar Seperti gambar di bawah ini.

-
Tambahkan Handshaking sebagai feedback ketika data di inputkan ke dari UI untuk mengetahui bawah arduino sudah berhasil menerima inputan tersebut Seperti gambar di bawah ini.

Contoh
- Sebagai contoh bisa pahami code berikut ini
import tkinter as tk
import serial
#from serial import Serial
from tkinter import messagebox
class Monitor:
def __init__(self, root):
self.root = root
self.root.title("Monitor")
self.root.geometry("400x200")
self.judul = ["Motor", "Servo"]
self.entries = []
self.create_widgets()
try:
self.serial_conn = serial.Serial('COM4', 115200, timeout=1)
except serial.SerialException:
messagebox.showerror("Error", "Tidak bisa membuka port COM3. Pastikan perangkat terhubung.")
self.serial_conn = None
def create_widgets(self):
for i, field in enumerate(self.judul):
tk.Label(self.root, text=f"{field}:").grid(row=i*2, column=0, padx=10, pady=5, sticky="w")
entry = tk.Entry(self.root)
entry.grid(row=i*2 + 1, column=0, padx=10, pady=5, sticky="w")
self.entries.append(entry)
tk.Button(self.root, text="OK", command=lambda e=entry, f=field: self.submit(e, f)).grid(row=i*2 + 1, column=1, padx=5, pady=5)
def submit(self, entry_field, label_text):
value = entry_field.get()
if value.isdigit() and 0 <= int(value) <= 200:
messagebox.showinfo("Sukses", f"{label_text} sebesar: {value}")
if self.serial_conn and self.serial_conn.is_open:
try:
self.serial_conn.write(f"{label_text}:{value}\n".encode())
except serial.SerialException:
messagebox.showerror("Error", "Gagal mengirim data ke perangkat Serial.")
else:
messagebox.showwarning("Error", f"yang bener masukin angkanya {label_text}!")
if __name__ == "__main__":
root = tk.Tk()
app = Monitor(root)
root.mainloop()